package cn.org.xwb.common.utils;

import cn.org.xwb.common.model.vo.RespResult;
import com.baomidou.mybatisplus.core.conditions.interfaces.Compare;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.stereotype.Component;

import java.util.Objects;

@Component
public class DbUtil {

    public interface Getter<C, T> extends Compare {
        T getter();
    }


    /**
     * 判断数据库中是否存在指定字段等于指定值的实体，存在则返回存在的实体，
     * 返回的实体只是查找到的一个，不存在返回 null
     *
     * @param getter 字段的 getter
     * @param fieldVal 指定字段的指定值
     * @param service service
     * @return 存在则返回存在的实体，不存在返回 null
     * @param <T> 数据库表对应的实体类型
     */
    public <T, R extends SFunction> T judgeEntryExists_eq_1(R getter, Object fieldVal, IService<T> service) {
        LambdaQueryWrapper<T> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(getter, fieldVal);
        T entry = service.getOne(queryWrapper);
        // 不存在重复
        if (Objects.isNull(entry)) return null;
        return entry;
    }

}
